#include <iostream>
using namespace std;
#include <stack>
int main(){//维护栈(局部最优)
    stack<int> c;
    int n;
    cin>>n;
    int r=0;
    c.push(-1);
    for(int i=0;i<n;i++){
        int a;
        cin>>a;
        if(a>c.top()){c.push(a);r++;continue;}
        if(a<c.top()){
            c.pop();
            r--;
            if(a<c.top()){continue;}
            c.push(a);
            r++;
        }
    }
    if(r<=0){r==1;}
    cout<<c.size()<<endl;
}
//-------------------------------------------------------------------------------------
// int main(){//动态规划(超时)
//     int a[100001] = {0};
//     int dp[100001] = {0};
//     int n;
//     int lenght = 0;
//     cin>>n;
//     for(int i=1;i<=n;i++){
//         cin>>a[i];
//     }
//     for(int i=1;i<=n;i++){
//         dp[i]=1;
//         for(int j=1;j<=i-1;j++){
//             if(a[i]>a[j]){
//                 dp[i] = max(dp[i],dp[j]+1);
//             }
//         }
//         lenght = max(lenght,dp[i]);
//     }
//     cout<<lenght;
//     return 0;
// }
//-------------------------------------------------------------------------------------------
//贪心+二分
// int main(){
//     int s[100005];
//     int n;
//     int t = 0;
//     cin>>n;
//     while(n--){
//         int x;
//         cin>>x;
//         int left=1;
//         int right=t;
//         while(left<right){
//             int mid = left+right>>1;
//             if(s[mid]>x) right= mid;
//             else left = mid+1;
//         }
//         if(s[left]>x) s[left] = x;
//         else s[++t] = x;
//     }
//     cout<<t<<endl;
// }
//----------------------------------------------
//树结构优化dp
#include <iostream>
// using namespace std;
// int main(){
//     int n;
//     cin>>n;
//     int a;
//     int r=0;
//     int c=0;
//     for(int i=0;i<n;i++){
//         cin>>a;

//         if(r<a){r=a;c++;continue;}
//         if(r>a){r=a;}
//     }
//     cout<<c;
// }